#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

/*
  作用：在当前进程执行指定的程序
  参数1：可执行文件的路径（自定义的或系统的）
  参数2：包含执行文件路径、要传递的参数的字符串数组 (最后一个元素必须是NULL)
  参数3：包含PATH环境变量的字符串数组（最后一个元素必须是NULL，可以直接为{NULL}表示用默认的）
  返回值
       失败：-1
       成功：函数不返回，后面的代码不会执行
  
 * int execve (char *__path, char *__argv[], char *__envp[])
*/
int main(int argc, char *argv[])
{
    printf("父进程开始执行,pid:%d\n",getpid());
    
    
    pid_t pid = fork();
    if(pid == -1)
    {
        printf("创建子进程失败\n");
        return -1;
    }
    else if(pid == 0)
    {
        printf("子进程开始执行,pid:%d,父进程pid是:%d\n",getpid(),getppid());
        char *path= "/home/ccb/桌面/workspace/geteway/test/process_test/other";
        char *argv[ ] = {path,"abc", NULL};
        char *env[ ] = {NULL};//默认path
        int result = execve(path, argv, env);
        if(result == -1)
        {
            printf("execve执行失败\n");
        }
    }
    else
    {
        printf("父进程执行,pid:%d,子进程pid是:%d\n",getpid(),pid);
        
    }
    
    if (pid == 0)
    {
        printf("子进程结束\n");
    }
    else
    {
        printf("父进程结束\n");
    }
    
    
    return 0;
}